02. Angular 프로젝트의 구성
앵귤러2의 프로젝트는 어떻게 구성되어 있는지 정리해보자
- ./app
- ./index.html
- ./node_modules
- ./package.json
- ./styles.css
- ./systemjs.config.js
- ./tsconfig.json
- ./typings.json
package.json
npm 명령을 통해 외부 모듈에 대한 “의존성 관리”를 해준다.
1 | { |
기본 설정 값으로 package.json파일을 만드려면
$ npm init –yes
설정한 pacakge.json 파일대로 패키지 설치하려면
$ npm install
개발 서버 실행
$ npm start
- 자주 사용하는 npm 명령어
명령어 | 의미 |
---|---|
npm install –global 패키지명 | 패키지를 로컬 전역에 설치함 |
npm install –global 패키지명@버전 | 패키지의 특정 버전을 로컬 전역에 설치함 |
npm install -g 패키지명@latest | 패키지의 최신 버전을 로컬에 설치함 |
npm uninstall -g 패키지명 | 로컬에 설치된 패키지를 삭제 |
npm view 패키지명 versions | 원격 저장소에 등록된 모든 패키지 버전 확인 |
npm view 패지지명 version | 원격저장소에 등록된 최신 패키지 버전만 확인 |
typings.json
타입스크립트가 외부라이브러리(node, jasmine, core-js)를 인식할 수 있게 한다.
tsconfig.json
타입스크립트를 자바스크립트로 변환할 때 필요한 설정 정보.
index.html
프로젝트의 시작 페이지.
1 |
|
styles.css
앱 전역 스타일링
폴리필 라이브러리 임포트
폴리필? 구버전의 브라우저가 최신 스크립트 기능에 대응하도록 보완하는 라이브러리
- core-js : ES6 지원을 위한 폴리필
- zonde.js : 변화 감지를 위한 라이브러리
- reflect-metadata : ES7 장식자 추가를 위한 폴리필
SystemJS 라이브러리
동적 모듈 로더, systemjs.config.js 파일을 통해 모듈 구성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36(function (global) {
System.config({
paths: {
// 경로에 대한 별칭 설정
'npm:': 'node_modules/'
},
map: {
app: 'app',
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
// 다른 라이브러리
'rxjs': 'npm:rxjs',
'angular-in-memory-web-api': 'npm:angular-in-memory-web-api',
},
// 파일이름이 없거나 확장자가 없을때의 처리방법에 대한 설정
packages: {
app: {
main: './main.js',
defaultExtension: 'js'
},
rxjs: {
defaultExtension: 'js'
},
'angular-in-memory-web-api': {
main: './index.js',
defaultExtension: 'js'
}
}
});
})(this);- paths 필드 : 경로에 대한 별칭
- map 필드 : 모듈 호출 정의
- app 필드 : 어플리케이션 디렉터리 위치 설정
- node_module의 별칭 (npm:@angular/..)으로 Angular 모듈 임포트
- Angular모듈은 @을 기재해서 외부 라이브러리와 구분
- packages : 확장자 처리
Angular 앱이 실행되는 위치이다. my-app은 어플리케이션 최상위 컴포넌트이다.
- app.component.ts
1
2
3
4
5
6
7import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: '<h1>Hello Angular 2 Application</h1>'
})
export class AppComponent { }selector의 이름이
에 대응하는 것을 확인할 수 있다. - app.module.ts
1
2
3
4
5
6
7
8
9
10
11
12import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
({
imports: [ BrowserModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }애플리케이션 차원의 모듈파일. 전역으로 사용되는 모듈이나 최상위 컴포넌트를 등록. bootstrap 속성에는 애플리케이션을 실행할 때 가장 먼저 호출하게 할 컴포넌트를 등록
main.ts
1
2
3
4
5
6import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule);
app.modules.ts 파일을 임포트 해서 platform-browser-dynamic을 등록.
platform-browser-dynamic은 Angular의 모든 API에 대한 진입점.
platform의 bootstrapModule() 메서드에 방금 정의한 AppModule을 지정.
Reference
쉽고 빠르게 배우는 Angular 2 프로그래밍 - 정진욱